iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0

Hello, 各位 iT 邦幫忙 的粉絲們大家好~~~

在本系列文因為工作上的產品應用需求,進而探索到很多層面的點滴事。

透過每篇 EP 的分享把這些點滴整理,看起來或許像是個獨立的小品抒發文、也或許是一系列技術研究文!?

總之,就當作的隨手雜記文吧!

本篇是 莫名其妙就跟世界等級的 OpenSource 專案攪和了!? 系列文的 EP22。


Avalonia UI 自 11.0.0 的版本 (2023/07/05) 推出後,可說是宣告為正式的 Avalonia UI 穩定版本。

若需要從 0.x.x 升級時,需要 Avalonia UI 參考 Upgrading from 0.10
https://docs.avaloniaui.net/docs/stay-up-to-date/upgrade-from-0.10

進行相關調整。

在把 GstreamerPlayer 的 Avalonia UI 相關的 Nuget 套件升級到目前 (2025/10/03) 最新的 11.3.7 版本之後,進行了以下的介紹處理。


首先,在原本的 GstreamerPlayer 的專案中的 "Program.cs" 有用到 LogToDebug(),這個就直接改成 LogToTrace(),並將 using Avalonia.Logging.Serilog; 的這個 using 移除。
01-1

01-2

再者,在該專案中的 "MainWindow.axaml.cs" 當中的 "this.AttachDevTools();" 再升級到 11.x.x 之後會遇到找不到此方法;透過安裝 "Avalonia.Diagnostics" 這個 nuget 套件即可解決此問題。

02-1

02-2

在 MainWindow.axaml.cs 的 urisOfChoice.Items 的錯誤,則修正為 urisOfChoice.ItemsSource。

02-3

02-4

繼續處理的是 "App.axaml" 當中指定 Application.Styles 的部分也已經遺失,透過安裝 "Avalonia.Themes.Fluent" 這個 nuget 套件,並把原本使用 Style 的設定更換成 "FluentTheme" 的使用,即可解決此問題。

03-1

03-2

03-3

再看到 FrameRenderer.cs 當中的問題,修正如下手法:

04-1

04-2

最後,則是找不到 "Avalonia.Rendering.UiThreadRenderTimer" 的建構方法,查看定義後發現在 11.0.0 之後,此類別已經被標註為 PrivateApi。

05-1

05-2

查看 Aavlonia UI 的官方說明後,這也不是沒有解決的辦法:
Using private apis in nuget packages

但要使用就要自行確認其相容性與穩定性。

開啟 GstreamerPlayer 的專案檔進行編輯:
06

並注意到下方會出現 AVA3001 的警告。

所以 Avalonia 的 nuget 版本才特別撰寫版本的升級限制,此做法可參考微軟官方文件 "Package versioning" 的介紹:
https://learn.microsoft.com/zh-tw/nuget/concepts/package-versioning

重新編譯執行該 GstreamerPlayer 專案,兩個主要 URI、Local File 的影片播放部份都沒太大問題。

  1. URI:

07-1

07-2

07-3

07-4

07-5

  1. Local File:

08-1

08-2

08-3

若有興趣上述變更的差異,可到 GitHub 的 gstreamer-sharp-netcore 存放庫觀看此 Commit:
https://github.com/JamestsaiTW/gstreamer-sharp-netcore/commit/2a11eaf960cf916862002fdf78ebc83ee91524dd


上一篇
EP 21
下一篇
EP 23
系列文
莫名其妙就跟世界等級的 OpenSource 專案攪和了!?25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言